// 生成器  避免异步编程中回调嵌套过深

// function * foo(){
//     console.log('zce')
//     return 100
// }

// const result = foo()
// console.log(result.next())

// function * foo () {
//     console.log('111')
//     yield 100
//     console.log('222')
//     yield 200
//     console.log('333')
//     yield 300
// }

// const generatoor = foo()
// console.log(generatoor.next())
// console.log(generatoor.next())
// console.log(generatoor.next())
// 生成器函数会自动返回生成器对象。调用对象的next方法才会执行函数的函数体，
// 调用yield暂停函数体执行。


// 生成器应用

// function * createIdMaker () {
//     let id = 1
//     while (true) {
//         yield id++
//     }
// }

// const idMaker = createIdMaker()
// console.log(idMaker.next().value)
// console.log(idMaker.next().value)
// console.log(idMaker.next().value)
// console.log(idMaker.next().value)


// const todos = {
//     life: ['吃饭','睡觉','打豆豆'],
//     learn: ['语文','数学','外语'],
//     work: ['喝茶'],
//     [Symbol.iterator]: function * () {
//         const all = [...this.life, ...this.learn, ...this.work]
//         for (const item of all) {
//             yield item
//         }
//     }
// }

// for (const item of todos) {
//     console.log(item)
// }

// 主要还是用来 解决异步回调嵌套过深的问题